package com.kh.pajx.sop.base;

import java.util.List;

import com.kh.pajx.sop.domain.PageBean;
import com.kh.pajx.sop.util.page.QueryHelper;
import com.kh.pajx.sop.util.page.QueryHelperForManyTable;

/**
 * 通用业务逻辑层接口
 * @param <T>
 * @author:	azzcsimp
 * @Createdate:	2014年6月24日 下午2:45:22
 */
public interface IBaseService<T> {
	
	/**
	 * 添加实体
	 * @param demo   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:58:15
	 */
	void save(T demo);
	
	/**
	 * 删除实体
	 * @param id   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:58:27
	 */
	void delete(Long id);
	
	/**
	 * 删除实体
	 * @param uuid   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:58:34
	 */
	void delete(String uuid);
	
	
	/**
	 * 更新实体
	 * @param demo   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:58:39
	 */
	void update(T demo);
	
	/**
	 * 查询实体
	 * @param id
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:58:46
	 */
	T getById(Long id);
	
	
	/**
	 * 查询实体
	 * @param uuid
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:58:54
	 */
	T getById(String uuid);
	
	/**
	 * 按id查询
	 * @param uuids  需要查询实体的id标识数组
	 * @return   符合条件的对象集合
	 * @author:	azzcsimp
	 * @Createdate:	2014年7月31日 上午11:32:34
	 */
	List<T> getByIds(String[] uuids);
	
	
	/**
	 * 查询全部
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月24日 下午3:59:02
	 */
	List<T> findAll();

	
	/**
	 * 通用分页查询
	 * @param pageNum 当前页
	 * @param pageSize 每页显示数据条数
	 * @param queryHelper	HQL语句与参数列表
	 * @return 分页数据对象
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月20日 下午3:38:53
	 */
	PageBean getPageBean(int pageNum, int pageSize, QueryHelper queryHelper);
	
	
	/**
	 * 通用分页查询 支持多表查询
	 * @param pageNum
	 * @param pageSize
	 * @param queryHelper
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月27日 上午11:46:46
	 */
	PageBean getPageBean(int pageNum, int pageSize, QueryHelperForManyTable queryHelper);
	
	
	/**
	 * 通用分页查询，需手动传入SQL语句
	 * @param pageNum
	 * @param pageSize
	 * @param listHQL
	 * @param countHQL
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月27日 上午11:47:57
	 */
	PageBean getPageBean(int pageNum, int pageSize, String listHQL,String countHQL);
	
	
	/**
	 * 根据HQL查询列表
	 * @param queryString HQL语句
	 * @param values 参数
	 * @return   
	 * @author:	azzcsimp
	 * @Createdate:	2014年6月27日 下午4:54:07
	 */
	public List<T> findListByHql(String queryString, Object... values);
	
}
